/**
 * 初始化地图
 */

/* global BMapGL */
/* global darkStyle */

function initMap(options) {
  options = Object.assign(
    {
      tilt: 50,
      heading: 0,
      minZoom: 17,
    },
    options
  );
  const map = new BMapGL.Map(options.element, {
    restrictCenter: false,
    style: { styleJson: options.style || darkStyle },
  });
  map.enableKeyboard();
  map.enableScrollWheelZoom();
  map.enableInertialDragging();
  map.enableContinuousZoom();

  map.setDisplayOptions(
    options.displayOptions || {
      indoor: false,
      poi: true,
      skyColors: options.skyColors || [
        "rgba(5, 5, 30, 0.01)",
        "rgba(5, 5, 30, 1.0)",
      ],
    }
  );
  if (options.center && options.zoom) {
    map.centerAndZoom(
      new BMapGL.Point(options.center[0], options.center[1]),
      options.zoom
    );
  }

  map.setTilt(options.tilt);
  map.setHeading(options.heading);

  // TODO: 测试条件添加
  map.addEventListener("click", (e) => {
    // console.log('map ', e);
    const { lng, lat } = e.latlng;
    console.log(`[${lng}, ${lat}]`);
  });

  // 控制放大缩小范围
  map.setMinZoom(17);
  map.setMaxZoom(20);

  // 控制在屏幕上的移动范围 [左上，右下]
  // [122.84681773992547, 40.999486911751205]
  // [122.88107248338983, 40.97824990907198]
  // const sw = new BMapGL.Point(122.84681773992547, 40.999486911751205);
  // const ne = new BMapGL.Point(122.88107248338983, 40.97824990907198);
  // const initBounds = new BMapGL.Bounds(sw, ne); // 初始地图矩形范围

  const centerPoint = new BMapGL.Point(options.center[0], options.center[1]);
  
  // map.addEventListener('dragend', () => {
  //   console.log(map.getBounds())
    
  //   // 判断中心点是否在初始的地图范围中
  //   if (initBounds.containsPoint(centerPoint)) {
  //     return;
  //   } else {
  //     // let { lng, lat } = centerPoint;
  //     // const { lng:neLng, lat:neLat } = initBounds.ne;
  //     // const { lng: swLng, lat: swLat } = initBounds.sw;
      
  //     // if (lng < neLng) lng = neLng;
  //     // if (lng > swLng) lng = swLng;
  //     // if (lat < swLat) lat = swLat;
  //     // if (lat > neLat) lat = neLat;
  //     console.log('----->')
  //     map.centerAndZoom(new centerPoint, map.getZoom());
  //     map.setTilt(options.tilt);
  //     // map.reset();
  //     console.log('<-----')
  //   }
  // })
  
  // [122.86128547666051, 41.00221697618163],[122.87019740923003, 40.97775318272484]
  const sw = new BMapGL.Point(122.86128547666051, 41.00221697618163);
  const ne = new BMapGL.Point(122.87019740923003, 40.97775318272484);
  const bounds = new BMapGL.Bounds(sw, ne); // 初始地图矩形范围
  map.setBounds(bounds)

  return map;
}

const snowStyle = [
  {
    featureType: "background",
    elementType: "geometry",
    stylers: {
      color: "#fefefeff",
    },
  },
  {
    featureType: "poilabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "road",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "road",
    elementType: "geometry.fill",
    stylers: {
      color: "#f0f1f7ff",
    },
  },
  {
    featureType: "road",
    elementType: "geometry.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
  {
    featureType: "highway",
    elementType: "geometry.fill",
    stylers: {
      color: "#e8eaf5ff",
    },
  },
  {
    featureType: "highway",
    elementType: "geometry.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
  {
    featureType: "nationalway",
    elementType: "geometry.fill",
    stylers: {
      color: "#e8eaf5ff",
    },
  },
  {
    featureType: "nationalway",
    elementType: "geometry.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
  {
    featureType: "provincialway",
    elementType: "geometry.fill",
    stylers: {
      color: "#e8eaf5ff",
    },
  },
  {
    featureType: "provincialway",
    elementType: "geometry.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
  {
    featureType: "railway",
    elementType: "geometry",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "highwaysign",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "highwaysign",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "nationalwaysign",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "nationalwaysign",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "provincialwaysign",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "provincialwaysign",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "tertiarywaysign",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "tertiarywaysign",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "subwaylabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "subwaylabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "poilabel",
    elementType: "labels.text.fill",
    stylers: {
      color: "#80868dff",
    },
  },
  {
    featureType: "poilabel",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
  {
    featureType: "districtlabel",
    elementType: "labels.text.fill",
    stylers: {
      color: "#7d82b0ff",
    },
  },
  {
    featureType: "districtlabel",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
  {
    featureType: "poilabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "airportlabel",
    elementType: "labels",
    stylers: {
      visibility: "on",
    },
  },
  {
    featureType: "airportlabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "airportlabel",
    elementType: "labels.text.fill",
    stylers: {
      color: "#80868dff",
    },
  },
  {
    featureType: "airportlabel",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
  {
    featureType: "manmade",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "manmade",
    elementType: "geometry",
    stylers: {
      color: "#eef1fbff",
    },
  },
  {
    featureType: "water",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "water",
    elementType: "geometry",
    stylers: {
      // "color": "#a7c9ffff"
      color: "#a7c9ffff",
    },
  },
  {
    featureType: "green",
    elementType: "geometry",
    stylers: {
      color: "#eef1fbff",
      visibility: "off",
    },
  },
  {
    featureType: "subway",
    elementType: "geometry",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "highway",
    elementType: "labels",
    stylers: {
      visibility: "on",
    },
  },
  {
    featureType: "highway",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
  {
    featureType: "highway",
    elementType: "labels.text.fill",
    stylers: {
      color: "#7d82b0ff",
    },
  },
  {
    featureType: "town",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "village",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "highway",
    elementType: "geometry",
    stylers: {
      weight: 3,
    },
  },
  {
    featureType: "cityhighway",
    elementType: "geometry.fill",
    stylers: {
      color: "#e8eaf5ff",
    },
  },
  {
    featureType: "arterial",
    elementType: "geometry.fill",
    stylers: {
      color: "#e8eaf5ff",
    },
  },
  {
    featureType: "arterial",
    elementType: "geometry.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
  {
    featureType: "cityhighway",
    elementType: "geometry.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
];

const darkStyle = [
  {
    featureType: "background",
    elementType: "geometry",
    stylers: {
      color: "#070c17ff",
    },
  },
  {
    featureType: "poilabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "road",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "road",
    elementType: "geometry.fill",
    stylers: {
      color: "#151e25ff",
    },
  },
  {
    featureType: "road",
    elementType: "geometry.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
  {
    featureType: "highway",
    elementType: "geometry.fill",
    stylers: {
      color: "#27303bff",
    },
  },
  {
    featureType: "highway",
    elementType: "geometry.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
  {
    featureType: "nationalway",
    elementType: "geometry.fill",
    stylers: {
      color: "#27303bff",
    },
  },
  {
    featureType: "nationalway",
    elementType: "geometry.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
  {
    featureType: "provincialway",
    elementType: "geometry.fill",
    stylers: {
      color: "#27303bff",
    },
  },
  {
    featureType: "provincialway",
    elementType: "geometry.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
  {
    featureType: "railway",
    elementType: "geometry",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "highwaysign",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "highwaysign",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "nationalwaysign",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "nationalwaysign",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "provincialwaysign",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "provincialwaysign",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "tertiarywaysign",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "tertiarywaysign",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "subwaylabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "subwaylabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "poilabel",
    elementType: "labels.text.fill",
    stylers: {
      color: "#80868dff",
    },
  },
  {
    featureType: "poilabel",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
  {
    featureType: "districtlabel",
    elementType: "labels.text.fill",
    stylers: {
      color: "#71767aff",
    },
  },
  {
    featureType: "districtlabel",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
  {
    featureType: "poilabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "airportlabel",
    elementType: "labels",
    stylers: {
      visibility: "on",
    },
  },
  {
    featureType: "airportlabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "airportlabel",
    elementType: "labels.text.fill",
    stylers: {
      color: "#80868dff",
    },
  },
  {
    featureType: "airportlabel",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
  {
    featureType: "manmade",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "manmade",
    elementType: "geometry",
    stylers: {
      color: "#070c17ff",
    },
  },
  {
    featureType: "water",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "water",
    elementType: "geometry",
    stylers: {
      color: "#141d27ff",
    },
  },
  {
    featureType: "green",
    elementType: "geometry",
    stylers: {
      color: "#122228ff",
      visibility: "off",
    },
  },
  {
    featureType: "subway",
    elementType: "geometry",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "highway",
    elementType: "labels",
    stylers: {
      visibility: "on",
    },
  },
  {
    featureType: "highway",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
  {
    featureType: "highway",
    elementType: "labels.text.fill",
    stylers: {
      color: "#5f6468ff",
    },
  },
  {
    featureType: "town",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "village",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "highway",
    elementType: "geometry",
    stylers: {
      weight: 3,
    },
  },
  {
    featureType: "cityhighway",
    elementType: "geometry.fill",
    stylers: {
      color: "#27303bff",
    },
  },
  {
    featureType: "arterial",
    elementType: "geometry.fill",
    stylers: {
      color: "#27303bff",
    },
  },
  {
    featureType: "arterial",
    elementType: "geometry.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
  {
    featureType: "cityhighway",
    elementType: "geometry.stroke",
    stylers: {
      color: "#ffffff00",
    },
  },
];

const purpleStyle = [
  {
    featureType: "water",
    elementType: "all",
    stylers: {
      color: "#021019ff",
    },
  },
  {
    featureType: "highway",
    elementType: "geometry.fill",
    stylers: {
      color: "#000000ff",
    },
  },
  {
    featureType: "highway",
    elementType: "geometry.stroke",
    stylers: {
      color: "#147a92ff",
    },
  },
  {
    featureType: "arterial",
    elementType: "geometry.fill",
    stylers: {
      color: "#000000ff",
    },
  },
  {
    featureType: "arterial",
    elementType: "geometry.stroke",
    stylers: {
      color: "#0b3d51ff",
    },
  },
  {
    featureType: "local",
    elementType: "geometry",
    stylers: {
      color: "#000000ff",
    },
  },
  {
    featureType: "railway",
    elementType: "geometry.fill",
    stylers: {
      color: "#000000ff",
    },
  },
  {
    featureType: "railway",
    elementType: "geometry.stroke",
    stylers: {
      color: "#08304bff",
    },
  },
  {
    featureType: "subway",
    elementType: "geometry",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "all",
    elementType: "labels.text.fill",
    stylers: {
      color: "#857f7fff",
    },
  },
  {
    featureType: "all",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#000000ff",
    },
  },
  {
    featureType: "green",
    elementType: "geometry",
    stylers: {
      color: "#062032ff",
    },
  },
  {
    featureType: "manmade",
    elementType: "geometry",
    stylers: {
      color: "#022338ff",
    },
  },
  {
    featureType: "poilabel",
    elementType: "all",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "all",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "water",
    elementType: "all",
    stylers: {
      visibility: "on",
      color: "#505565ff",
    },
  },
  {
    featureType: "green",
    elementType: "all",
    stylers: {
      color: "#353b4dff",
    },
  },
  {
    featureType: "road",
    elementType: "geometry.fill",
    stylers: {
      visibility: "on",
      color: "#2a2e3bff",
    },
  },
  {
    featureType: "road",
    elementType: "geometry.stroke",
    stylers: {
      color: "#4b5163ff",
    },
  },
  {
    featureType: "administrative",
    elementType: "labels.text.fill",
    stylers: {
      color: "#8e99bdff",
    },
  },
  {
    featureType: "administrative",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#2f3547ff",
    },
  },
  {
    featureType: "poilabel",
    elementType: "labels.text.fill",
    stylers: {
      color: "#727c9aff",
    },
  },
  {
    featureType: "road",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#293045ff",
    },
  },
  {
    featureType: "road",
    elementType: "labels.text.fill",
    stylers: {
      color: "#777e93ff",
    },
  },
  {
    featureType: "town",
    elementType: "all",
    stylers: {
      visibility: "on",
    },
  },
  {
    featureType: "subway",
    elementType: "labels.text.fill",
    stylers: {
      visibility: "off",
      color: "#787f95ff",
    },
  },
  {
    featureType: "subway",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#40475eff",
    },
  },
  {
    featureType: "building",
    elementType: "geometry.fill",
    stylers: {
      color: "#485161ff",
    },
  },
  {
    featureType: "manmade",
    elementType: "geometry.fill",
    stylers: {
      color: "#374053ff",
    },
  },
  {
    featureType: "manmade",
    elementType: "labels.text.fill",
    stylers: {
      color: "#8792adff",
    },
  },
  {
    featureType: "manmade",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#292f48ff",
    },
  },
  {
    featureType: "scenicspotslabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "railway",
    elementType: "geometry",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "scenicspotslabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "highwaysign",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "highwaysign",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "nationalwaysign",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "nationalwaysign",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "provincialwaysign",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "provincialwaysign",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "tertiarywaysign",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "tertiarywaysign",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "subwaylabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "subwaylabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "village",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "town",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "land",
    elementType: "geometry",
    stylers: {
      color: "#40495aff",
      visibility: "on",
    },
  },
];

const whiteStyle = [
  {
    featureType: "water",
    elementType: "geometry",
    stylers: {
      visibility: "on",
      color: "#ccd6d7ff",
    },
  },
  {
    featureType: "green",
    elementType: "geometry",
    stylers: {
      visibility: "on",
      color: "#dee5e5ff",
    },
  },
  {
    featureType: "building",
    elementType: "geometry",
    stylers: {
      visibility: "on",
    },
  },
  {
    featureType: "building",
    elementType: "geometry.fill",
    stylers: {
      color: "#d1dbdbff",
    },
  },
  {
    featureType: "building",
    elementType: "geometry.stroke",
    stylers: {
      color: "#aab6b6ff",
    },
  },
  {
    featureType: "subwaystation",
    elementType: "geometry",
    stylers: {
      visibility: "off",
      color: "#888fa0ff",
    },
  },
  {
    featureType: "education",
    elementType: "geometry",
    stylers: {
      visibility: "on",
      color: "#e1e7e7ff",
    },
  },
  {
    featureType: "medical",
    elementType: "geometry",
    stylers: {
      visibility: "on",
      color: "#d1dbdbff",
    },
  },
  {
    featureType: "scenicspots",
    elementType: "geometry",
    stylers: {
      visibility: "on",
      color: "#d1dbdbff",
    },
  },
  {
    featureType: "highway",
    elementType: "geometry",
    stylers: {
      visibility: "on",
      weight: "4",
    },
  },
  {
    featureType: "highway",
    elementType: "geometry.fill",
    stylers: {
      color: "#ffffffff",
    },
  },
  {
    featureType: "highway",
    elementType: "geometry.stroke",
    stylers: {
      color: "#cacfcfff",
    },
  },
  {
    featureType: "highway",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "highway",
    elementType: "labels.text.fill",
    stylers: {
      color: "#999999ff",
    },
  },
  {
    featureType: "highway",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffffff",
    },
  },
  {
    featureType: "highway",
    elementType: "labels.icon",
    stylers: {
      visibility: "on",
    },
  },
  {
    featureType: "arterial",
    elementType: "geometry",
    stylers: {
      visibility: "on",
      weight: "2",
    },
  },
  {
    featureType: "arterial",
    elementType: "geometry.fill",
    stylers: {
      color: "#fbfffeff",
    },
  },
  {
    featureType: "arterial",
    elementType: "geometry.stroke",
    stylers: {
      color: "#cacfcfff",
    },
  },
  {
    featureType: "arterial",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "arterial",
    elementType: "labels.text.fill",
    stylers: {
      color: "#999999ff",
    },
  },
  {
    featureType: "arterial",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffffff",
    },
  },
  {
    featureType: "local",
    elementType: "geometry",
    stylers: {
      visibility: "on",
      weight: "1",
    },
  },
  {
    featureType: "local",
    elementType: "geometry.fill",
    stylers: {
      color: "#fbfffeff",
    },
  },
  {
    featureType: "local",
    elementType: "geometry.stroke",
    stylers: {
      color: "#cacfcfff",
    },
  },
  {
    featureType: "local",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "local",
    elementType: "labels.text.fill",
    stylers: {
      color: "#999999ff",
    },
  },
  {
    featureType: "local",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffffff",
    },
  },
  {
    featureType: "railway",
    elementType: "geometry",
    stylers: {
      visibility: "off",
      weight: "1",
    },
  },
  {
    featureType: "railway",
    elementType: "geometry.fill",
    stylers: {
      color: "#9494941a",
    },
  },
  {
    featureType: "railway",
    elementType: "geometry.stroke",
    stylers: {
      color: "#ffffff1a",
    },
  },
  {
    featureType: "subway",
    elementType: "geometry",
    stylers: {
      visibility: "off",
      weight: "1",
    },
  },
  {
    featureType: "subway",
    elementType: "geometry.fill",
    stylers: {
      color: "#c3bed433",
    },
  },
  {
    featureType: "subway",
    elementType: "geometry.stroke",
    stylers: {
      color: "#ffffff33",
    },
  },
  {
    featureType: "subway",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "subway",
    elementType: "labels.text.fill",
    stylers: {
      color: "#979c9aff",
    },
  },
  {
    featureType: "subway",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffffff",
    },
  },
  {
    featureType: "continent",
    elementType: "labels",
    stylers: {
      visibility: "on",
    },
  },
  {
    featureType: "continent",
    elementType: "labels.icon",
    stylers: {
      visibility: "on",
    },
  },
  {
    featureType: "continent",
    elementType: "labels.text.fill",
    stylers: {
      color: "#333333ff",
    },
  },
  {
    featureType: "continent",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffffff",
    },
  },
  {
    featureType: "city",
    elementType: "labels.icon",
    stylers: {
      visibility: "on",
    },
  },
  {
    featureType: "city",
    elementType: "labels",
    stylers: {
      visibility: "on",
    },
  },
  {
    featureType: "city",
    elementType: "labels.text.fill",
    stylers: {
      color: "#454d50ff",
    },
  },
  {
    featureType: "city",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffffff",
    },
  },
  {
    featureType: "town",
    elementType: "labels.icon",
    stylers: {
      visibility: "on",
    },
  },
  {
    featureType: "town",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "town",
    elementType: "labels.text.fill",
    stylers: {
      color: "#454d50ff",
    },
  },
  {
    featureType: "town",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffffff",
    },
  },
  {
    featureType: "road",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "road",
    elementType: "geometry.fill",
    stylers: {
      color: "#fbfffeff",
    },
  },
  {
    featureType: "poilabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "districtlabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "poilabel",
    elementType: "labels.text.fill",
    stylers: {
      color: "#999999ff",
    },
  },
  {
    featureType: "districtlabel",
    elementType: "labels.text.fill",
    stylers: {
      color: "#888fa0ff",
    },
  },
  {
    featureType: "transportation",
    elementType: "geometry",
    stylers: {
      color: "#d1dbdbff",
    },
  },
  {
    featureType: "companylabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "restaurantlabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "lifeservicelabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "carservicelabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "financelabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "otherlabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "village",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "district",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "land",
    elementType: "geometry",
    stylers: {
      color: "#edf3f3ff",
    },
  },
  {
    featureType: "nationalway",
    elementType: "geometry.stroke",
    stylers: {
      color: "#cacfcfff",
    },
  },
  {
    featureType: "provincialway",
    elementType: "geometry.stroke",
    stylers: {
      color: "#cacfcfff",
    },
  },
  {
    featureType: "cityhighway",
    elementType: "geometry.stroke",
    stylers: {
      color: "#cacfcfff",
    },
  },
  {
    featureType: "road",
    elementType: "geometry.stroke",
    stylers: {
      color: "#cacfcfff",
    },
  },
  {
    featureType: "subwaylabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "subwaylabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "tertiarywaysign",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "tertiarywaysign",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "provincialwaysign",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "provincialwaysign",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "nationalwaysign",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "nationalwaysign",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "highwaysign",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "highwaysign",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "nationalway",
    elementType: "geometry.fill",
    stylers: {
      color: "#fbfffeff",
    },
  },
  {
    featureType: "nationalway",
    elementType: "labels.text.fill",
    stylers: {
      color: "#999999ff",
    },
  },
  {
    featureType: "provincialway",
    elementType: "labels.text.fill",
    stylers: {
      color: "#999999ff",
    },
  },
  {
    featureType: "cityhighway",
    elementType: "labels.text.fill",
    stylers: {
      color: "#999999ff",
    },
  },
  {
    featureType: "cityhighway",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffffff",
    },
  },
  {
    featureType: "highway",
    stylers: {
      level: "6",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "highway",
    stylers: {
      level: "7",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "highway",
    stylers: {
      level: "8",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "highway",
    elementType: "geometry",
    stylers: {
      visibility: "off",
      level: "6",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "highway",
    elementType: "geometry",
    stylers: {
      visibility: "off",
      level: "7",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "highway",
    elementType: "geometry",
    stylers: {
      visibility: "off",
      level: "8",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "highway",
    elementType: "labels",
    stylers: {
      visibility: "off",
      level: "6",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "highway",
    elementType: "labels",
    stylers: {
      visibility: "off",
      level: "7",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "highway",
    elementType: "labels",
    stylers: {
      visibility: "off",
      level: "8",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "nationalway",
    stylers: {
      level: "6",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "nationalway",
    stylers: {
      level: "7",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "nationalway",
    stylers: {
      level: "8",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "nationalway",
    elementType: "geometry",
    stylers: {
      visibility: "off",
      level: "6",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "nationalway",
    elementType: "geometry",
    stylers: {
      visibility: "off",
      level: "7",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "nationalway",
    elementType: "geometry",
    stylers: {
      visibility: "off",
      level: "8",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "nationalway",
    elementType: "labels",
    stylers: {
      visibility: "off",
      level: "6",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "nationalway",
    elementType: "labels",
    stylers: {
      visibility: "off",
      level: "7",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "nationalway",
    elementType: "labels",
    stylers: {
      visibility: "off",
      level: "8",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "provincialway",
    stylers: {
      level: "8",
      curZoomRegionId: "0",
      curZoomRegion: "8-8",
    },
  },
  {
    featureType: "provincialway",
    elementType: "geometry",
    stylers: {
      visibility: "off",
      level: "8",
      curZoomRegionId: "0",
      curZoomRegion: "8-8",
    },
  },
  {
    featureType: "provincialway",
    elementType: "labels",
    stylers: {
      visibility: "off",
      level: "8",
      curZoomRegionId: "0",
      curZoomRegion: "8-8",
    },
  },
  {
    featureType: "cityhighway",
    stylers: {
      level: "6",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "cityhighway",
    stylers: {
      level: "7",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "cityhighway",
    stylers: {
      level: "8",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "cityhighway",
    elementType: "geometry",
    stylers: {
      visibility: "off",
      level: "6",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "cityhighway",
    elementType: "geometry",
    stylers: {
      visibility: "off",
      level: "7",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "cityhighway",
    elementType: "geometry",
    stylers: {
      visibility: "off",
      level: "8",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "cityhighway",
    elementType: "labels",
    stylers: {
      visibility: "off",
      level: "6",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "cityhighway",
    elementType: "labels",
    stylers: {
      visibility: "off",
      level: "7",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "cityhighway",
    elementType: "labels",
    stylers: {
      visibility: "off",
      level: "8",
      curZoomRegionId: "0",
      curZoomRegion: "6-8",
    },
  },
  {
    featureType: "cityhighway",
    elementType: "geometry.fill",
    stylers: {
      color: "#fbfffeff",
    },
  },
  {
    featureType: "water",
    elementType: "labels.text.fill",
    stylers: {
      color: "#8f5a33ff",
    },
  },
  {
    featureType: "water",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffffff",
    },
  },
  {
    featureType: "country",
    elementType: "labels.text.fill",
    stylers: {
      color: "#8f5a33ff",
    },
  },
  {
    featureType: "country",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffffff",
    },
  },
  {
    featureType: "country",
    elementType: "labels.text",
    stylers: {
      fontsize: "28",
    },
  },
  {
    featureType: "manmade",
    elementType: "geometry",
    stylers: {
      color: "#dfe7e7ff",
    },
  },
  {
    featureType: "provincialway",
    elementType: "geometry.fill",
    stylers: {
      color: "#fbfffeff",
    },
  },
  {
    featureType: "tertiaryway",
    elementType: "geometry.fill",
    stylers: {
      color: "#fbfffeff",
    },
  },
  {
    featureType: "manmade",
    elementType: "labels.text.fill",
    stylers: {
      color: "#999999ff",
    },
  },
  {
    featureType: "manmade",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffffff",
    },
  },
  {
    featureType: "scenicspots",
    elementType: "labels.text.fill",
    stylers: {
      color: "#999999ff",
    },
  },
  {
    featureType: "scenicspots",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffffff",
    },
  },
  {
    featureType: "airportlabel",
    elementType: "labels.text.fill",
    stylers: {
      color: "#999999ff",
    },
  },
  {
    featureType: "airportlabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "scenicspotslabel",
    elementType: "labels.text.fill",
    stylers: {
      color: "#999999ff",
    },
  },
  {
    featureType: "scenicspotslabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "educationlabel",
    elementType: "labels.text.fill",
    stylers: {
      color: "#999999ff",
    },
  },
  {
    featureType: "educationlabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "medicallabel",
    elementType: "labels.text.fill",
    stylers: {
      color: "#999999ff",
    },
  },
  {
    featureType: "medicallabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "companylabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "restaurantlabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "hotellabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "hotellabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "shoppinglabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "shoppinglabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "lifeservicelabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "carservicelabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "transportationlabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "transportationlabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "financelabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "entertainment",
    elementType: "geometry",
    stylers: {
      color: "#d1dbdbff",
    },
  },
  {
    featureType: "estate",
    elementType: "geometry",
    stylers: {
      color: "#d1dbdbff",
    },
  },
  {
    featureType: "shopping",
    elementType: "geometry",
    stylers: {
      color: "#d1dbdbff",
    },
  },
  {
    featureType: "education",
    elementType: "labels.text.fill",
    stylers: {
      color: "#999999ff",
    },
  },
  {
    featureType: "education",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffffff",
    },
  },
  {
    featureType: "medical",
    elementType: "labels.text.fill",
    stylers: {
      color: "#999999ff",
    },
  },
  {
    featureType: "medical",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffffff",
    },
  },
  {
    featureType: "transportation",
    elementType: "labels.text.fill",
    stylers: {
      color: "#999999ff",
    },
  },
  {
    featureType: "transportation",
    elementType: "labels.text.stroke",
    stylers: {
      color: "#ffffffff",
    },
  },
  {
    featureType: "road",
    elementType: "geometry",
    stylers: {
      visibility: "on",
    },
  },
  {
    featureType: "nationalway",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "provincialway",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "cityhighway",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "tertiaryway",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "fourlevelway",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "water",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "manmade",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "education",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "medical",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "scenicspots",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "transportation",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "entertainmentlabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "estatelabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "businesstowerlabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "governmentlabel",
    elementType: "labels.icon",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "governmentlabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "businesstowerlabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "estatelabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "entertainmentlabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "medicallabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "educationlabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "scenicspotslabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "airportlabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
  {
    featureType: "poilabel",
    elementType: "labels",
    stylers: {
      visibility: "off",
    },
  },
];

window.snowStyle = snowStyle;
window.darkStyle = darkStyle;
window.purpleStyle = purpleStyle;
window.whiteStyle = whiteStyle;
